/**
 * Copyright (C) 2008+ Spark Zheng
 *
 * @file	src/sort.c
 * @brief       many sort functions
 * @module      dlib
 * @see		dlib
 * @history     
 *		version 0.1.0 Spark init sort module, add dlib_str_sort
 */

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <ctype.h>

#include "sort.h"
#include "misc.h"

void dlib_str_sort(char **array, size_t array_size) 
{
	size_t gap, i, j;
	char **a, **b, *tmp;

	for (gap = 0; ++gap < array_size;)
		gap *= 2;
	while (gap /= 2) {
		for (i = gap; i < array_size; i++) {
			for (j = i - gap; ; j -= gap) {
				a = array + j;
				b = a + gap;
				if (strcmp(*a, *b) <= 0)
					break;
				tmp = *a;
				*a = *b;
				*b = tmp;
				if (j < gap)
					break;
			} /* end for j */
		} /* end for i */
	} /* end while gap /= 2 */
	return;
}
